home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1997 May / PC Plus Super CD Issue 127 (May 1997).iso / componen / powerbld / demo / pbdemo.bas < prev    next >
Encoding:
BASIC Source File  |  1996-06-30  |  6.6 KB  |  318 lines

  1. '==============================================================================
  2. ' File: PBDEMO.BAS
  3. ' Desc: Demo program for PB/DLL
  4. '------------------------------------------------------------------------------
  5.  
  6. $COMPILE DLL
  7. $DIM     ALL
  8.  
  9. %NULL  = 0
  10. %True  = -1
  11. %False = 0
  12. %Size  = 8190
  13.  
  14. GLOBAL pbArray() AS LONG
  15.  
  16. '----------------------------------------------------------
  17. '- pbFill
  18. '----------------------------------------------------------
  19.  
  20. SUB pbFill(BYVAL nTimes as INTEGER) EXPORT
  21.  
  22.   DIM k               AS LONG
  23.   REDIM pbArray(nTimes) AS LONG
  24.  
  25.   FOR k = 0 TO nTimes
  26.     pbArray(k) = (32767 * RND + 1)
  27.   NEXT k
  28.  
  29. END SUB
  30.  
  31. '----------------------------------------------------------
  32. '- pbFillVb
  33. '----------------------------------------------------------
  34.  
  35. SUB pbFillVb(BYVAL gArray AS DWORD, BYVAL nTimes AS INTEGER) EXPORT
  36.  
  37.   DIM k               AS LONG
  38.   DIM vbArray         AS LONG PTR
  39.   DIM pbArray(nTimes) AS GLOBAL LONG
  40.  
  41.   vbArray   = gArray
  42.  
  43.   FOR k = 0 TO nTimes
  44.     @vbArray[K] = pbArray(K)
  45.   NEXT
  46.  
  47. END SUB
  48.  
  49. '----------------------------------------------------------
  50. '- pbSearch
  51. '----------------------------------------------------------
  52.  
  53. SUB pbSearch(BYVAL nTimes as INTEGER, RetVal AS SINGLE) EXPORT
  54.  
  55.   DIM J               AS LONG
  56.   DIM K               AS LONG
  57.   DIM N               AS LONG
  58.   DIM StartTime       AS SINGLE
  59.   DIM pbArray(nTimes) AS GLOBAL LONG
  60.  
  61.   StartTime = TIMER
  62.  
  63.   FOR J = 0 TO nTimes
  64.     N = pbArray(J)
  65.     GOSUB SearchArray
  66.   NEXT J
  67.  
  68.   RetVal = TIMER - StartTime
  69.   EXIT SUB
  70.  
  71. SearchArray:
  72.  
  73.   FOR K = 0 TO nTimes
  74.     IF pbArray(K) = N THEN EXIT FOR
  75.   NEXT K
  76.  
  77.   RETURN
  78.  
  79. END SUB
  80.  
  81. '----------------------------------------------------------
  82. '- pbSort
  83. '----------------------------------------------------------
  84.  
  85. SUB pbSort(BYVAL nTimes AS INTEGER, RetVal AS SINGLE) EXPORT
  86.  
  87.   DIM J               AS LONG
  88.   DIM K               AS LONG
  89.   DIM Tmp             AS LONG
  90.   DIM StartTime       AS SINGLE
  91.   DIM pbArray(nTimes) AS GLOBAL LONG
  92.  
  93.   StartTime = TIMER
  94.  
  95.   FOR J = 0 TO nTimes - 1
  96.     FOR K = 0 TO nTimes - J - 1
  97.       IF pbArray(K) > pbArray(K + 1) THEN
  98.        '-- Swap GlobArray(K+1) with GlobArray(k) ...
  99.         Tmp = pbArray(K + 1)
  100.         pbArray(K + 1) = pbArray(k)
  101.         pbArray(K) = Tmp
  102.       END IF
  103.     NEXT K
  104.   NEXT J
  105.  
  106.   RetVal = TIMER - StartTime
  107.  
  108. END SUB
  109.  
  110. '----------------------------------------------------------
  111. '- pboSearch
  112. '----------------------------------------------------------
  113.  
  114. SUB pboSearch(BYVAL nTimes as integer, RetVal AS SINGLE) EXPORT
  115.  
  116.   DIM I               AS LONG
  117.   DIM j               AS LONG
  118.   DIM k               AS LONG
  119.   DIM n               AS LONG
  120.   DIM StartTime       AS SINGLE
  121.   DIM pbArray(nTimes) AS GLOBAL LONG
  122.  
  123.   StartTime = TIMER
  124.  
  125.   FOR J = 0 TO nTimes
  126.     n = pbArray(J)
  127.     GOSUB oSearchArray
  128.   NEXT J
  129.  
  130.   RetVal = TIMER - StartTime
  131.   EXIT SUB
  132.  
  133. oSearchArray:
  134.  
  135.   ARRAY SCAN pbArray(), = n, TO I
  136.   RETURN
  137.  
  138. END SUB
  139.  
  140. '----------------------------------------------------------
  141. '- pboSort
  142. '----------------------------------------------------------
  143.  
  144. SUB pboSort(BYVAL nTimes AS INTEGER, RetVal AS SINGLE) EXPORT
  145.  
  146.   DIM StartTime       AS SINGLE
  147.   DIM pbArray(nTimes) AS GLOBAL LONG
  148.  
  149.   StartTime = TIMER
  150.  
  151.   ARRAY SORT pbArray() FOR nTimes
  152.   RetVal = TIMER - StartTime
  153.  
  154. END SUB
  155.  
  156. '----------------------------------------------------------
  157. '- Sieve test
  158. '----------------------------------------------------------
  159.  
  160. SUB PbSieve (BYVAL nIter AS INTEGER, RetVal AS SINGLE) EXPORT
  161.  
  162.   DIM StartTime    AS SINGLE
  163.   DIM flags(%Size) AS INTEGER
  164.   DIM Size         AS INTEGER
  165.   DIM X            AS INTEGER
  166.   DIM I            AS INTEGER
  167.   DIM K            AS INTEGER
  168.   DIM Count        AS INTEGER
  169.  
  170.   StartTime = TIMER
  171.  
  172.   FOR X = 1 TO nIter
  173.  
  174.     Count = %NULL
  175.  
  176.     FOR I = 0 TO %Size
  177.       Flags(I) = %False
  178.     NEXT
  179.  
  180.     FOR I = 2 TO %Size
  181.       IF NOT (Flags(I)) THEN
  182.         FOR K = I + I TO %Size STEP I
  183.           Flags(K) = %True
  184.         NEXT
  185.         INCR Count
  186.       END IF
  187.     NEXT
  188.  
  189.   NEXT
  190.  
  191.   RetVal  = TIMER - StartTime
  192.  
  193. END SUB  ' pbSieve
  194.  
  195.  
  196. '------------------------------------------------------------------------------
  197. '- pbLongTest
  198. '----------------------------------------------------------
  199.  
  200. SUB pbLongTest (ByVal nIters As Integer, RetVal As Single) EXPORT
  201.  
  202.   DIM StartTime AS SINGLE
  203.   DIM I     AS INTEGER
  204.   DIM J     AS INTEGER
  205.   DIM K     AS LONG
  206.   DIM Q     AS LONG
  207.   DIM Y     AS LONG
  208.   DIM Z     AS LONG
  209.  
  210.   StartTime = TIMER
  211.  
  212.   K = 7
  213.   Y = 5
  214.   Z = 1
  215.  
  216.   FOR I = 1 TO nIters
  217.     FOR J = 1 TO nIters
  218.       Q = Y
  219.       Q = Z
  220.       Q = Q + Y
  221.       Q = Q + Z
  222.       Q = Q - Y
  223.       Q = Q - Z
  224.       Q = K * Y
  225.       Q = K \ Z
  226.     NEXT
  227.   NEXT
  228.  
  229.   RetVal = TIMER - StartTime
  230.  
  231. END SUB
  232.  
  233. '----------------------------------------------------------
  234. '- Tak
  235. '----------------------------------------------------------
  236.  
  237. FUNCTION Tak(BYVAL x AS INTEGER, BYVAL y AS INTEGER, BYVAL z AS INTEGER) AS INTEGER
  238.  
  239.   IF (y >= x) THEN
  240.     FUNCTION = z
  241.   ELSE
  242.     FUNCTION = Tak( Tak(x-1,y,z), _
  243.                     Tak(y-1,z,x), _
  244.                     Tak(z-1,x,y))
  245.   END IF
  246.  
  247. END FUNCTION
  248.  
  249. '----------------------------------------------------------
  250. '- pbTak
  251. '----------------------------------------------------------
  252.  
  253. SUB pbTak(BYVAL x AS INTEGER, BYVAL y AS INTEGER, BYVAL z AS INTEGER, _
  254.           BYVAL nTimes AS INTEGER, RetVal AS SINGLE) EXPORT
  255.  
  256.   DIM StartTime AS SINGLE
  257.   DIM I         AS INTEGER, _
  258.       J         AS INTEGER
  259.  
  260.   StartTime = TIMER
  261.  
  262.   FOR I = 1 TO nTimes
  263.     J = Tak(x, y, z)
  264.   NEXT
  265.  
  266.   RetVal = TIMER - StartTime
  267.  
  268. END SUB
  269.  
  270. '----------------------------------------------------------
  271. '- fnX
  272. '----------------------------------------------------------
  273.  
  274. FUNCTION fnX() AS INTEGER
  275.  
  276.   FUNCTION = SIN(COS(SIN(.8)))
  277.  
  278. END FUNCTION
  279.  
  280. '----------------------------------------------------------
  281. '- pbOpt
  282. '----------------------------------------------------------
  283.  
  284. SUB pbShort(BYVAL nIters AS INTEGER, RetVal AS SINGLE) EXPORT
  285.  
  286.   DIM II AS INTEGER, _
  287.       IJ AS INTEGER, _
  288.       X1 AS INTEGER, _
  289.       X2 AS INTEGER, _
  290.       X3 AS INTEGER, _
  291.       X4 AS INTEGER, _
  292.       O  AS INTEGER, _
  293.       X  AS INTEGER, _
  294.       Z  AS INTEGER
  295.  
  296.   DIM zTime AS SINGLE
  297.  
  298.   zTime = TIMER
  299.  
  300.   Z = 0
  301.   O = 1
  302.  
  303.   FOR X = 1 TO nIters
  304.     FOR II= 1 TO 500
  305.       FOR IJ = 1 TO 500
  306.         X1 = 6
  307.         X2 = X2 * 1
  308.         X3 = X3 * O
  309.         X4 = X4 + Z
  310.         IF (X1 > 10) AND (FNX < 25) THEN ITERATE
  311.       NEXT IJ
  312.     NEXT II
  313.   NEXT X
  314.  
  315.   RetVal = TIMER - zTime
  316.  
  317. END SUB
  318.